package cn.com.platform.dao;

import java.util.List;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;

import cn.com.platform.entity.ArticleCateEntity;

/**
 * 文章分类dao
 * 
 * @author nibili 2018年7月17日
 * 
 */
public interface ArticleCateDao extends JpaRepository<ArticleCateEntity, Long>, JpaSpecificationExecutor<ArticleCateEntity> {

	/**
	 * 按隐藏状态查找
	 * 
	 * @param hidden
	 * @return
	 * @auth nibili 2018年7月17日
	 */
	@Query("select a from ArticleCateEntity a where a.hidden=?1 order by a.orderby")
	public List<ArticleCateEntity> getByHidden(boolean hidden);

	/**
	 * 获取所有
	 * 
	 * @return
	 * @auth nibili 2018年7月17日
	 */
	@Query("select a from ArticleCateEntity a  order by orderby")
	public List<ArticleCateEntity> geAll();

	/**
	 * 按父节点id和隐藏状态 查找
	 * 
	 * @param parentId
	 * @param hidden
	 * @return
	 * @auth nibili 2018年7月17日
	 */
	@Query("select a from ArticleCateEntity a where a.parentId=?1 and a.hidden=?2 order by orderby")
	public List<ArticleCateEntity> getByParentIdAndHidden(long parentId, boolean hidden);

	/**
	 * 获取全部未删除数据(不判断hidden)
	 * 
	 * @param pageable
	 * @param deleteStatus
	 * @return
	 * @author wxy 2016年8月18日
	 */
	public Page<ArticleCateEntity> findByDeleteStatus(Pageable pageable, boolean deleteStatus);

	/**
	 * 获取全部未删除数据
	 * 
	 * @param pageable
	 * @return
	 * @author wxy 2016年8月3日
	 */
	public Page<ArticleCateEntity> findByDeleteStatusAndHidden(Pageable pageable, boolean deleteStatus, Boolean hidden);

	/**
	 * 按父节点，查找实体
	 * 
	 * @param parentId
	 * @return
	 * @author wxy 2016年8月4日
	 */
	@Query("select count(a.id) from ArticleCateEntity a where a.parentId=?1 and a.deleteStatus=?2")
	public Integer countByParentId(long parentId, boolean deleteStatus);

	/**
	 * 通过id与标题获取实体
	 * 
	 * @param id
	 * @param title
	 * @return
	 * @author wxy 2016年8月19日
	 */
	public ArticleCateEntity findByIdAndTitle(Long id, String title);

}
